import jwt
from toutiao import Config
# 编码
# payload,key,algorithm
# payload       存在数据的部分  exp 过期时间
# key           秘钥
# algorithm     算法
# jwt.encode({"user_id":1},'abc',algorithm='HS256')

# 生成的token 必须要有 过期时间
def generic_token(payload,expiry,secret=None):
    """
    :param payload:   用户传递过来的字典数据
    :param expiry:       过期时间
    :param secret:      秘钥
    :return:            token
    """
    # 1.组织过期时间数据
    _payload = {
        'exp':expiry
    }
    # 2.将用户的字典数据，更新到我们的字典中
    _payload.update(payload)
    # 3.获取秘钥
    if secret is None:
        secret = Config.JWT_SECRET
    # 4.返回token
    return jwt.encode(_payload,secret,algorithm='HS256').decode()


#解码
# jwt.decode()


# 解码
#解码
def verify_token(token,secret=None):
    """
    验证token
    :param token:       传递过来的token
    :param secret:      秘钥
    :return:            payload 信息返回
    """

    if secret is None:
        secret=Config.JWT_SECRET
    try:
        # 解码
        payload=jwt.decode(token,secret,algorithms=['HS256'])
    # except jwt.PyJWTError
    except Exception:
        # token 有异常
        return None
    else:
        return payload
